Computer systems are constantly growing more complex to the point that it is extremely difficult to diagnose these systems. Software now presents a wide variety of configuration options, programming interfaces (APIs), software dependencies, performance tuning, etc. Typically, these complex computer systems comprise several layers of architectural abstractions. Each layer may have a number of components that interact with each other in a virtually infinite number of ways. Thus, this complexity makes diagnosis of the system very difficult.
Gathering sufficient diagnostic data on a complex stack of software can be both labor-intensive and error-prone. It is usually an iterative multi-pass process conducted between a remote service representative and the user experiencing the problem. These problems are exacerbated if the computer system topology is distributed or client-server.
Frequently, the diagnostic process requests data that is not available to the user as it pertains to hardware and software in “the stack”: the operating system, middleware (including database and communication software), a specific application or user interface, with which the user is not familiar. Often, the service representative knows and uses diagnostic techniques. These techniques, however, are generally beyond the technical depth of the end user.
Getting the necessary diagnostic information requires educating the end-user about information gathering. Because many users are unable to figure out what has gone wrong with their system, the user is often hostile or unable to gather as much information as is needed to efficiently isolate the problem. This information gathering dialog can thus be tedious, expensive, frustrating, and time consuming.
Due to this multi-step manual process and frequent user hostility, the service representative is often disinclined to acquire all of the potentially needed facts in the initial dialog. Collecting full information involves walking the end user through complex diagnosis on a number of related interdependent components in the stack. Because each diagnostic test is an imposition on the end user, the service representative tries to run the fewest possible tests. Consequently, too little information is often obtained in the initial call, resulting in a back and forth dialog between service representative and end user, which again exacerbates the frustration of the user. Each iteration of this dialog can eventually contribute to the complete diagnosis; yet all the while the system is inoperable or operating poorly.
Accordingly, it may be desirable to provide methods and systems that can automatically and efficiently gather diagnostic information from a computer system. In addition, it may be desirable to provide methods and systems that can gather diagnostic information in a manner that is easy and transparent for the user.